// #include<iostream>
// using namespace std;
// //引用做参数
// // void swap(int& a, int& b){//--------相当于实参和形参是相同的空间
// //     int tmp = a;
// //     a = b;
// //     b = tmp;
// // }
// //引用做返回值
// int& Func1(int a, int b){
//     static int result = a + b;//返回引用最好用静态变量，因为生命周期长
//     return result;
// }
// int Func2(int a, int b){
//     static int result = a + b;//返回引用最好用静态变量，因为生命周期长
//     return result;
// }

// //-------------------static的作用
// int& Add(int a, int b){
//     static int c = a + b;
//     return c;
// }
// //-------一个函数要使用引用返回，就必须令返回值出函数后还在，就是增加其生命周期
// //-------使用引用返回的好处是少创建一个临时变量存储返回值，以提高效率

// //------------内联函数
// void Swap(int& a, int& b){
//     int tmp = a;
//     a = b;
//     b = tmp;
// }//-----因为频繁调用函数需要建立栈帧，会消耗资源，所以C语言使用宏函数，c++使用内联函数

// //内联函数
// inline void swap(int& a, int& b){
//     int tmp = a;
//     a = b;
//     b = tmp;
// }//-----------使用内联函数可以在调用处展开，可以不创建栈帧

// //--宏函数
// // #define Swap(a, b) \  
// //     do {            \  
// //         int tmp = a;\  
// //         a = b;      \  
// //         b = tmp;    \  
// //     } while (0)
// // int main(){
// //     // int a = 1, b = 2;
// //     // // swap(a, b);
// //     // const int& tmp2 = Func2(a, b);
// //     // int& tmp1 = Func1(a, b);
// //     // cout << tmp1 <<  tmp2 << endl;

// //     // int& result = Add(1, 2);
// //     // cout << result << endl;

// //     int a = 0, b = 1;
// //     swap(a, b);
// //     return 0;
// // }

// //-----------------auto关键字

// // int main(){
// //     int a = 10;
// //     auto b = a;//---b的类型是由a自动推导出来的 
// //     int& c = a;
// //     double d = 10.2;
// //     cout << typeid(a).name() << endl;
// //     cout << typeid(b).name() << endl;
// //     cout << typeid(c).name() << endl;
// //     cout << typeid(d).name() << endl;
// //     //-----------auto不能作为函数的参数使用,它有其更好的使用场景,map

// //     return 0;
// // }

// //--------范围for----相当于python中的for循环
// //----
// // void mul2(int* a){//----不能使用范围for,因为a在这儿时指针,而不是数组,取不到数组中的每个值
// //     for(int e : a){
// //         e *= 2;
// //     }
// // }
// int main1(){
//     int a[] = {1,2,3,4,5,6};

//     for(int i = 0; i < sizeof(a) / sizeof(int); i++){
//         a[i] *= 2;
//     }
//     //--------上下相等
//     for(auto e : a){
//         e *= 2;
//     }


//     return 0;
// }

// //------------nullptr

// int main(){
//     //c
//     int* p1 = NULL;//------c++中NULL = 0, 所以函数传参为NULL的时候如果遇到重载,那么NULL传的位置会出错
    
//     //c++
//     int* p2 = nullptr;

//     return 0;
// }
// #include <iostream>
// #include <random>
// using namespace std;
// int main() {
//     // 创建随机数生成器
//     random_device rd;  // 非确定性随机数生成器
//     mt19937 gen(rd()); // 以 rd() 作为种子的梅森旋转算法生成器

//     // 定义随机数分布范围
//     uniform_int_distribution<> distr(1, 250); // 1到250之间的均匀分布

//     // 生成随机数
//     int random_number = distr(gen);

//     // 输出随机数
//    cout << "Random number between 1 and 250: " << random_number << endl;

//     return 0;
// }

#include <iostream>
using namespace std;
int main(){
    int a = 0;
    int& b = a;
    int* c = &a;

    cout << typeid(a).name() << endl;
    cout << typeid(b).name() << endl;
    cout << typeid(c).name() << endl;


    return 0;
}
